package JSON;

import PoJo.Student;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.junit.Test;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JavaToJson {
     @Test
    public void test(){
//1.JavaBean 与 Json之间的转换
         Student person = new Student("陈俊华",1);
         //创建Gson对象实例
         Gson gson = new Gson();
         //toJson方法可以把java对象转换成为json字符串
         String s = gson.toJson(person);
         System.out.println(s);
         //fronJson 把 json字符串转换为Java对象
         //第一个参数是json字符串
         //第二个参数是转换回去的Java对象类型
         Student student = gson.fromJson(s, Student.class);
         System.out.println(student);
     }
//2.List和Json的互转
    @Test
    public void test2(){
        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student("陈俊华",1));
        studentList.add(new Student("郑清波",2));

        Gson gson = new Gson();
        //把List转换为Json字符串
        String s = gson.toJson(studentList);
        System.out.println(s);

        //将Json中的List转换为Java中的List
        Type genericSuperclass = studentList.getClass().getGenericSuperclass();
        ParameterizedType p = (ParameterizedType) genericSuperclass;
        //1.字符串  2.要转换成为什么类型 new JSONListToJavaList().getType()
        //（String,Type） 类型用来讲JSON中的List转换为Java中的List
        List<Student>list = gson.fromJson(s,new JSONListToJavaList().getType());
        System.out.println(list);
        Student o = list.get(0);
        System.out.println(o);
    }
//3.Map和json的转换
    @Test
    public void test3(){
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("陈俊华",1);
        map.put("郑清波",2);
        Gson gson = new Gson();
        String s = gson.toJson(map, new TypeToken<HashMap<String, Object>>() {}.getType());
        System.out.println(s);

    }
}
